package com.item;

import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * Stream流的三类方法
 * ---1.获取方法
 * ---2.中间方法
 * ---3.终结方法
 * 获取方法：1.单列集合（可使用Collection接口中的默认方法获取流）
 *         2.双列集合
 *         3.数组
 *         4.同种数据类型的多个数据
 * 中间操作方法：1.filter
 *            2.limit
 *            3.skip
 *            4.
 *            5.
 * 终结操作方法：1.forEach
 *            2.count
 * Stream流收集操作（Collectors）：
 */
public class StreamDemo {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("张三");
        names.add("张三2");
        names.add("张三丰");
        names.add("张三丰2");
        names.add("张无忌");
        names.add("张无忌2");
        names.add("赵敏");
        names.add("赵敏2");
        names.add("赵六");
        names.add("赵六2");

        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
        names.forEach(name->{
            if(name.startsWith("张")){
                list1.add(name);
            }
        });
        list1.forEach(name->{
            if(name.length()==3){
                list2.add(name);
            }
        });
        list2.forEach(System.out::println);
        System.out.println("-----------------------------------");
        //1.获取集合的流对象 Stream流
        //2.筛选，获取符合条件的元素
        //3.终结方法
        names.stream()
                .filter(s->s.startsWith("张"))
                .filter(s->s.length()==3)
                .forEach(System.out::println);
    }
    @Test
    public void test1(){
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);
        list.add(10);
        //调用收集方法
//        List<Integer> list1 = list.stream()
//                .filter(integer -> integer % 2 == 0)
//                .collect(Collectors.toList());
        List<Integer> list1 = list.stream()
                .filter(integer -> integer % 2 == 0)
                .toList();
        System.out.println(list1);

    }
    @Test
    public void test2(){
        List<String> list =new ArrayList<>();
        list.add("zhangsan,23");
        list.add("lisi,25");
        list.add("wangwu,26");
        //过滤大于等于24岁的数据
        Map<Object, Object> map = list.stream().filter(s -> {
            String[] split = s.split(",");
            int age = Integer.parseInt(split[1]);
            return age >= 24;
        }).collect(Collectors.toMap(s -> {
            String[] split = s.split(",");
            return split[0];
        }, s -> {
            String[] split = s.split(",");
            return split[1];
        }));
        map.forEach((k,v)-> System.out.println(k+"---"+v));
    }
    @Test
    public void test3(){
        List<String> list1 =new ArrayList<>();
        list1.add("佟大为");
        list1.add("王宝强");
        list1.add("邓超");
        list1.add("黄渤");
        list1.add("张学友");
        list1.add("成龙");

        List<String> list2 =new ArrayList<>();
        list2.add("迪丽热巴");
        list2.add("古力娜扎");
        list2.add("杨幂");
        list2.add("杨紫");
        list2.add("赵丽颖");

        Stream<String> stream1 = list1.stream().filter(s -> s.length() == 3).limit(2);

        Stream<String> stream2 = list2.stream().filter(s -> s.startsWith("杨")).skip(1);

        Stream.concat(stream1,stream2).forEach(System.out::println);
    }
}
